Due to the complex architecture of modern semiconductor devices such as microcontrollers that may consist of multiple system masters accessing a plurality of different memories in parallel and at high speed, tracing of the memory of the semiconductor device may be problematic when performing a real-time memory and peripheral trace. Especially if large areas of the memory of the semiconductor device are selected for tracing, there is a high amount of trace data. Typically, trace data is stored in a trace buffer of an internal or external trace module. It is afterwards transferred from the trace buffer via a trace port. The bandwidth of the trace port interface may be a limiting factor especially for the trace performance in real-time environments. Accordingly, it is necessary to reduce the amount of trace data. This data reduction is typically performed by pre-filtering the trace data. Based on the application needs, the amount of trace data that is to be stored in the trace buffer and that is to be transferred over the trace port interface is reduced. This pre-filtering step may avoid losses of trace data if the amount of unfiltered data is higher than the data transfer speed of the available trace port. The trace data transfer has to be completed in an available time window that is reserved for this transfer.
According to the prior art, trace data filtering is mainly performed by defining one or more trace windows for an address range of the memory. However, due to space and gate count constraints and system performance degradation that is accompanying the tracing process, this trace data filtering concept is very limited. Especially if the data that is to be traced is spread over a large address base, a very coarse granularity for the address ranges is possible, i.e. needed. This will increase the amount of trace data and lead to the already mentioned technical problems.